package com.gitee.ixtf.lucene.kotlinx

import com.gitee.ixtf.core.IEntity
import com.gitee.ixtf.core.IOperator
import org.apache.lucene.document.Document
import org.apache.lucene.document.Field.Store
import org.apache.lucene.document.Field.Store.NO
import org.apache.lucene.facet.FacetField

fun Document.facet(field: String, v: String?) {
  v?.takeIf { it.isNotBlank() }?.also { add(FacetField(field, it)) }
}

fun Document.facet(field: String, path: Sequence<String>?) {
  path
      ?.filter { it.isNotBlank() }
      ?.toList()
      ?.takeIf { it.isNotEmpty() }
      ?.apply { add(FacetField(field, *toTypedArray())) }
}

fun Document.facet(field: String, vararg path: String?) =
    facet(field, path.asSequence().filterNotNull())

fun Document.facet(field: String, v: IEntity?, store: Store = NO) {
  entity(field, v, store)
  facet(field, v?.id)
}

fun Document.facet(field: String, v: IOperator?, store: Store = NO) {
  entity(field, v, store)
  facet(field, v?.id)
}

fun Document.facet(field: String, e: Enum<*>?, store: Store = NO) {
  enum(field, e, store)
  facet(field, e?.name)
}
